#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QApplication>

MainWindow::MainWindow(const User &user, QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
    , m_currentUser(user)
    , m_dbManager(new DatabaseManager(this))
{
    ui->setupUi(this);
    
    // 设置窗口标题
    setWindowTitle("主界面 - 登录系统");
    
    // 更新用户信息显示
    setCurrentUser(user);
    
    // 初始化用户表格
    ui->userTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
    ui->userTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
    
    // 检查数据库连接
    if (!m_dbManager->isConnected()) {
        showError("数据库连接失败，请检查系统配置！");
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::setCurrentUser(const User &user)
{
    m_currentUser = user;
    
    // 更新界面显示
    QString userInfoText = QString("当前用户：%1 (ID: %2)").arg(user.getUsername()).arg(user.getId());
    ui->userInfoLabel->setText(userInfoText);
    
    // 设置窗口标题
    QString title = QString("主界面 - 登录系统 - %1").arg(user.getUsername());
    setWindowTitle(title);
}

void MainWindow::closeEvent(QCloseEvent *event)
{
    // 关闭主窗口时退出整个应用程序
    QApplication::quit();
    event->accept();
}

void MainWindow::on_userInfoButton_clicked()
{
    showUserInfo();
}

void MainWindow::on_userManageButton_clicked()
{
    // 检查是否为管理员用户
    if (m_currentUser.getUsername() == "admin") {
        showUserManagement();
    } else {
        showError("只有管理员用户才能访问用户管理功能！");
    }
}

void MainWindow::on_logoutButton_clicked()
{
    logout();
}

void MainWindow::on_exitButton_clicked()
{
    QApplication::quit();
}

void MainWindow::showUserInfo()
{
    QString info = QString("用户信息：\n\n"
                          "用户ID：%1\n"
                          "用户名：%2\n"
                          "注册时间：%3")
                          .arg(m_currentUser.getId())
                          .arg(m_currentUser.getUsername())
                          .arg(m_currentUser.getRegisterTime().toString("yyyy-MM-dd hh:mm:ss"));
    
    QMessageBox::information(this, "用户信息", info, QMessageBox::Ok);
}

void MainWindow::showUserManagement()
{
    // 显示用户表格
    ui->userTableWidget->setVisible(true);
    
    // 刷新用户列表
    refreshUserList();
}

void MainWindow::refreshUserList()
{
    // 清空表格
    ui->userTableWidget->clearContents();
    ui->userTableWidget->setRowCount(0);
    
    // 获取所有用户
    QList<User> users = m_dbManager->getAllUsers();
    
    // 设置表格行数
    ui->userTableWidget->setRowCount(users.size());
    
    // 填充表格数据
    for (int i = 0; i < users.size(); ++i) {
        const User &user = users.at(i);
        
        // 用户ID
        QTableWidgetItem *idItem = new QTableWidgetItem(QString::number(user.getId()));
        ui->userTableWidget->setItem(i, 0, idItem);
        
        // 用户名
        QTableWidgetItem *usernameItem = new QTableWidgetItem(user.getUsername());
        ui->userTableWidget->setItem(i, 1, usernameItem);
        
        // 注册时间
        QTableWidgetItem *timeItem = new QTableWidgetItem(user.getRegisterTime().toString("yyyy-MM-dd hh:mm:ss"));
        ui->userTableWidget->setItem(i, 2, timeItem);
        
        // 操作按钮（删除）
        if (user.getUsername() != "admin") { // 不允许删除管理员
            QPushButton *deleteButton = new QPushButton("删除");
            deleteButton->setStyleSheet("QPushButton { background: #e74c3c; color: white; border: none; border-radius: 4px; padding: 4px; }");
            
            // 连接删除按钮信号
            connect(deleteButton, &QPushButton::clicked, [this, user]() {
                int ret = QMessageBox::question(this, "确认删除", 
                    QString("确定要删除用户 '%1' 吗？").arg(user.getUsername()),
                    QMessageBox::Yes | QMessageBox::No);
                
                if (ret == QMessageBox::Yes) {
                    if (m_dbManager->removeUser(user.getId())) {
                        showSuccess("用户删除成功！");
                        refreshUserList();
                    } else {
                        showError("用户删除失败！");
                    }
                }
            });
            
            ui->userTableWidget->setCellWidget(i, 3, deleteButton);
        } else {
            QTableWidgetItem *adminItem = new QTableWidgetItem("管理员");
            adminItem->setTextAlignment(Qt::AlignCenter);
            ui->userTableWidget->setItem(i, 3, adminItem);
        }
    }
    
    // 调整列宽
    ui->userTableWidget->resizeColumnsToContents();
}

void MainWindow::showError(const QString &message)
{
    QMessageBox::critical(this, "错误", message, QMessageBox::Ok);
}

void MainWindow::showSuccess(const QString &message)
{
    QMessageBox::information(this, "成功", message, QMessageBox::Ok);
}

void MainWindow::logout()
{
    int ret = QMessageBox::question(this, "确认退出", "确定要退出登录吗？", 
        QMessageBox::Yes | QMessageBox::No);
    
    if (ret == QMessageBox::Yes) {
        // 隐藏用户表格
        ui->userTableWidget->setVisible(false);
        
        // 清空当前用户
        m_currentUser = User();
        
        // 通知登录窗口返回初始登录页
        emit logoutRequested();
        
        // 关闭主窗口
        close();
    }
}
